import { http } from "@/utils/http";

/**
 * 安全管理自查事项清单查询参数（分页 + 条件）
 */
export interface SirSelfCheckQuery extends BasePageQuery {
  professional?: string; // 专业
  checkContent?: string; // 检查内容
  checkStandardCode?: string; // 检查标准编号
  checkStandard?: string; // 检查标准
  complianceCriteria?: string; // 符合性判定标准
  checkMethod?: string; // 检查方式
  companyBasis?: string; // 公司依据
  companyClause?: string; // 公司条款
  lawsBasis?: string; // 法律法规依据
  lawsClause?: string; // 法律法规条款
  baseCycle?: string; // 基础周期
  integrationSource?: string; // 融合来源
  checkDepartments?: string; // 检查涉及部门
  belongDept?: number; // 归属部门
  tagId?: number; // 标签ID
}

/**
 * 安全管理自查事项清单响应数据结构
 */
export interface SirSelfCheckBo {
  id: number; // 主键ID
  seq?: number; // 序号
  professional?: string; // 专业
  checkContent?: string; // 检查内容
  checkStandardCode?: string; // 检查标准编号
  checkStandard?: string; // 检查标准
  complianceCriteria?: string; // 符合性判定标准
  checkMethod?: string; // 检查方式
  companyBasis?: string; // 公司依据
  companyClause?: string; // 公司条款
  lawsBasis?: string; // 法律法规依据
  lawsClause?: string; // 法律法规条款
  baseCycle?: string; // 基础周期
  integrationSource?: string; // 融合来源
  checkDepartments?: string; // 检查涉及部门
  creatorId?: number; // 创建者ID
  createTime?: Date; // 创建时间
  updaterId?: number; // 更新者ID
  updateTime?: Date; // 更新时间
  deleted?: number; // 删除标志（0代表存在 1代表删除）
}

/**
 * 安全检查API
 */

/**
 * 获取安全检查分页列表
 * @param params 查询参数
 */
export function getSirSelfCheckListApi(params: SirSelfCheckQuery) {
  return http.request<ResponseData<PageDTO<SirSelfCheckBo>>>(
    "get",
    "/airport/SirSelfCheck/list",
    { params }
  );
}

/**
 * 导出安全检查列表Excel
 * @param params 查询参数
 */
export const exportSirSelfCheckExcelApi = (
  params: SirSelfCheckQuery,
  fileName: string
) => {
  return http.download("/airport/SirSelfCheck/excel", fileName, {
    params
  });
};

/**
 * 获取安全检查详情
 * @param id 安全检查ID
 */
export function getSirSelfCheckDetailApi(id: number) {
  return http.request<ResponseData<SirSelfCheckBo>>(
    "get",
    `/airport/SirSelfCheck/${id}`
  );
}

/**
 * 新增或保存安全检查
 * @param data 安全检查数据
 */
export function saveSirSelfCheckApi(data: SirSelfCheckBo) {
  return http.request<ResponseData<void>>(
    "post",
    "/airport/SirSelfCheck/save",
    { data }
  );
}

/**
 * 删除安全检查
 * @param ids 安全检查ID数组
 */
export function deleteSirSelfCheckApi(ids: number[]) {
  return http.request<ResponseData<void>>('delete', '/airport/SirSelfCheck', {
    params: { ids: ids.join(',') } // 将数组转换为逗号分隔的字符串
  });
}

/**
 * 获取HTML格式的安全检查列表
 */
export function getAllSirSelfCheckAsHtmlApi() {
  return http.request<string>("get", "/airport/SirSelfCheck/getAll", {
    headers: {
      Accept: "text/html"
    }
  });
}

/**
 * 获取专业列表
 */
export function getProfessionalApi() {
  // 修改响应类型为包含data字段的ResponseData格式
  return http.request<ResponseData<string[]>>('get', '/airport/SirSelfCheck/getProfessional');
}

/**
 * 批量设置归属部门
 * @param ids 自查事项ID数组
 * @param belongDept 归属部门ID
 */
export function batchSetDeptApi(ids: number[], belongDept: number) {
  // 1. 将 URLSearchParams 改为普通的 JavaScript 对象
  const payload = {
    ids: ids,
    belongDept: belongDept
  };

  return http.request<ResponseData<void>>(
    'post',
    '/airport/SirSelfCheck/batchSetDept',
    // 2. 将对象作为 data 发送
    { data: payload }
  );
}
/**
 * 批量设置标签
 * @param ids 自查事项ID数组
 * @param tagId 标签ID
 */
export function batchSetTagApi(ids: number[], tagId: number) {
  // 1. 将 URLSearchParams 改为普通的 JavaScript 对象
  const payload = {
    ids: ids,
    tagId: tagId
  };

  return http.request<ResponseData<void>>(
    'post',
    '/airport/SirSelfCheck/batchSetTag',
    // 2. 将对象作为 data 发送
    { data: payload }
  );


}

/**
 * 导入数据响应结构
 */
export interface ImportDataResponse {
  added: number; // 新增数量
  updated: number; // 更新数量
}

/**
 * 下载模板
 */
export function downloadTemplateApi() {
  return http.download('/airport/SirSelfCheck/downloadTemplate', '自查事项模板.xlsx');
}


/**
 * 上传导入数据
 * @param file 上传的Excel文件
 * @param belongDept 归属部门ID
 */
export function importDataApi(file: File, belongDept: number) {
  const formData = new FormData();
  formData.append('file', file);
  formData.append('belongDept', belongDept.toString());

  return http.request<ResponseData<ImportDataResponse>>(
    'post',
    '/airport/SirSelfCheck/importData',
    {
      data: formData,
      headers: {
        'Content-Type': 'multipart/form-data'
      }
    }
  );
}
